package JaggSoft.Utilidades;

import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class ListaSugerida extends JScrollPane implements KeyListener {
    private JTextField campo;
    private JList<String> mylista;
    private int altura;
    private DefaultListModel<String> modelo;
    private ArrayList<String> lista;
    public ListaSugerida(JTextField camp,Container contenedor,String consulta) {
        modelo=new DefaultListModel<String>();
        lista=new ArrayList<String>();
        
        mylista=new JList<String>();
        this.add(mylista);
        //this.setModel(modelo);
        mylista.setModel(modelo);
        this.altura=80;
        this.campo=camp;
        //this.setOpaque(false);               
        contenedor.add(this);
        //this.setVisible(false);
        //this.addKeyListener(this);
        mylista.addKeyListener(this);
        this.setBounds(campo.getX(),campo.getY()+campo.getHeight(),campo.getWidth(),altura);
        mylista.setBounds(campo.getX(),campo.getY()+campo.getHeight(),campo.getWidth(),altura);
        LlenarLista(consulta);
    }
    private void LlenarLista(String consulta){
        String[] columnas={"dato"};
        JTable tabla=Conexion.ObtenerTabla(consulta,columnas);
        for(int i=0;i<tabla.getRowCount();i++)
            lista.add((String)tabla.getValueAt(i,0));
    }
    public void setAltura(int alt){
        this.altura=alt;
    }
    public void setDatos(char dato){
        String texto=campo.getText();
        texto+=((dato!='\n')&&(dato!='\t')&&(dato!='\r')&&(dato!='\f')&&(dato!='\b')&&(dato!='\\')?""+dato:"");
        
        modelo.removeAllElements();
        for(String s:lista)
            if(s.indexOf(texto)==0)
                modelo.addElement(s);
        
        if(modelo.getSize()>0){
            this.setVisible(true);
        }
    }
    public boolean tieneElementos(){
        return (this.mylista.getModel().getSize()>0);
    }
    public void Mostrar(){
        this.mylista.setSelectedIndex(0);
        this.mylista.requestFocus();
    }
    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyPressed(KeyEvent e) {
        switch(e.getKeyCode()){
            case KeyEvent.VK_ENTER:
                //this.campo.setText(this.getSelectedValue().toString());
                this.campo.setText(mylista.getSelectedValue().toString());
                campo.requestFocus();
                //this.setVisible(false);
                break;
            case KeyEvent.VK_ESCAPE:
                campo.requestFocus();
                //this.setVisible(false);
                break;
        }
    }
    @Override
    public void keyReleased(KeyEvent e) {}
}